package h0709;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class WordJieLong {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);

        int beginIndex = sc.nextInt();//开始索引
        int n = sc.nextInt();//单词个数
        sc.nextLine();
        ArrayList<String> list = new ArrayList<>();
        for (int i = 0; i <n; i++) {
            String s = sc.nextLine();
            list.add(s);
        }

        //输出一个字符串，表示最终拼接的单词串。
        getResult(list,beginIndex);
    }
//    private static void getResult(ArrayList<String> list, int index) {
//        // 当存在多个首字母相同的单词时，取长度最长的单词，如果长度也相等，则取字典序最小的单词；已经参与接龙的单词不能重复使用。
//        String s = list.get(index);
//        char c = s.charAt(s.length() - 1); // 下一个单词首字母
//        StringBuilder res = new StringBuilder();
//        res.append(s);
//
//        list.remove(s);
//        // 如何实现循环
//        while (true) {
//            ArrayList<String> strings = new ArrayList<>();
//            char ch = res.charAt(res.length() - 1);
//            for (String string : list) {
//                if (string.startsWith(String.valueOf(ch))) {
//                    strings.add(string);
//                }
//            }
//
//            if (strings.isEmpty()) {
//                break; // 没有符合条件的字符串时，退出循环
//            }
//
//            strings.sort((o1, o2) -> {
//                int compare = Integer.compare(o2.length(), o1.length());
//                if (compare != 0) {
//                    return compare;
//                }
//                // 按照字典序比较
//                return o1.compareTo(o2);
//            });
//
//            String next = strings.get(0);
//            res.append(next);
//            list.remove(next);
//        }
//
//        // 输出结果
//        System.out.println("结果: " + res.toString());
//    }

    private static void getResult(ArrayList<String> list,int index) {
        //当存在多个首字母相同的单词时，取长度最长的单词，如果长度也相等，则取字典序最小的单词；已经参与接龙的单词不能重复使用。
        String s = list.get(index);
        char c=s.charAt(s.length()-1); //下一个单词首字母
        StringBuilder res = new StringBuilder();
        res.append(s);

        list.remove(s);
        //如何实现循环?
        while (true){ //注意循环的嵌套，注重理解。哪些应该放在外面，哪些应该在里面。
            ArrayList<String> strings=new ArrayList<>();
            char ch=res.charAt(res.length()-1);
            for (String string : list) {
                if (string.startsWith(String.valueOf(ch))){
                    strings.add(string);
                }
            }
            //不满足条件直接退出。
            if (strings.isEmpty()){
                break;
            }
            //主要是这里排序的书写
            strings.sort((o1, o2) -> {
                int compare = Integer.compare(o2.length(), o1.length());
                if (compare!=0){
                    return compare;
                }
                //按照字典序比较
                return o1.compareTo(o2);
            });
            String next = strings.get(0);
            res.append(next);
            list.remove(next);
        }
        System.out.println(res.toString());
    }
}
